import 'package:json_annotation/json_annotation.dart';
import 'package:xindong/common/xindong_types.dart';
import 'package:xindong/manager/xindong_user_controller.dart';
import 'package:xindong/models/user/xindong_user.dart';
import 'package:xindong/utils/xindong_text_util.dart';

import '../xindong_crown_class.dart';

part 'xindong_base_user.g.dart';

// 基类用户，因返回数据格式不匹配，需要各种子类用户模型
@JsonSerializable()
class XinDongBaseUser extends XinDongUser {
  // 这两个类型不统一，不直接使用，用int uid代替
  dynamic is_identity_authentication; // 身份认证

  // 数据类型和mine user不一样
  dynamic charm_grade; // 魅力等级
  dynamic crown_grade; // 皇冠等级
  dynamic noble_grade; // 贵族等级
  dynamic realname_auth; // 实名认证
  dynamic voice_auth; // 语音认证
  dynamic img_auth; // 图片认证
  dynamic nvshen; // 女神

  String? city; // 常驻城市
  String? constellation; // 星座
  String? occupation; // 工作
  String? stature; // 身高
  String? weight; // 体重

  int? is_vip; // 会员
  int? is_new; // 新用户
  int? is_noble; // 贵族
  int? is_crown; // 贵族
  String? is_topup; // 充值图标
  dynamic is_online;

  int? tycoon; // 富豪
  String? tycoonName;
  String? tycoonIcon;
  dynamic tycoonGrade;
  int? charm_value; // 魅力
  String? charm_name;
  String? charm_icon;

  XinDongCrownClass? crown;

  // 是否是我自己
  bool get isSelf {
    if (uid == XinDongUserController.to.userInfo?.uid) {
      return true;
    }
    return false;
  }

  // 女神
  bool get isNvShen {
    return "1" == "$nvshen";
  }

  // 会员
  bool get isHuiYuan {
    return int.parse("${crown_grade ?? 0}") > 0;
  }

  // 实名
  bool get isShiMing {
    return "${AuthState.pass}" == "$is_identity_authentication";
  }

  // 获取显示身高
  String get statureText {
    if (TextUtil.isEmpty(stature)) {
      return "";
    }
    return "$stature" "cm";
  }

  // 获取显示体重
  String get weightText {
    if (TextUtil.isEmpty(weight)) {
      return "";
    }
    return "$weight" "kg";
  }

  XinDongBaseUser();

  factory XinDongBaseUser.fromJson(Map<String, dynamic> json) => _$XinDongBaseUserFromJson(json);

  Map<String, dynamic> toJson() => _$XinDongBaseUserToJson(this);
}
